package com.qqclient.view;

import com.loy.utils.Utilitys;
import com.qqclient.service.FileClientService;
import com.qqclient.service.MessageClientService;
import com.qqclient.service.UserClientService;

import java.io.IOException;

/**
 * 1. Q客户端的登录界面
 */
public class QQView {

    private boolean loop = true;
    private String key = "";
    private UserClientService userClientService = new UserClientService();
    private MessageClientService messageClientService = new MessageClientService();
    private FileClientService fileClientService = new FileClientService();

    public static void main(String[] args) throws IOException, ClassNotFoundException {
        new QQView().mainMenu();
        System.out.println("客户端退出系统.....");
    }


    // 显示主菜单
    private void mainMenu() throws IOException, ClassNotFoundException {
        while (loop){
            System.out.println("====欢迎登录网络通信系统====");
            System.out.println("\t\t 1 登录系统");
            System.out.println("\t\t 9 退出系统");
            System.out.println("请输入你的选择..");
            key = Utilitys.readString(1);
            // 根据用户的输入，来处理不同的逻辑
            switch (key){
                case "1":
                    System.out.println("请输入用户号：");
                    String userId = Utilitys.readString(50);
                    System.out.println("请输入密码：");
                    String pwd = Utilitys.readString(50);
                    // 上面，我们获取到了用户输入的用户名和密码了，那么接下来我们需要
                    // 到服务器端去验证该用户是否合法
                    if(userClientService.cheeckUser(userId,pwd)){
                        System.out.println("=====欢迎用户 ("+ userId+")登录成功=====");
                        // 进入到二集菜单
                        while (loop){
                            System.out.println("\n========网络通信系统二级菜单（用户 : "+userId+"）=======");
                            System.out.println("\t\t 1 显示在线用户列表");
                            System.out.println("\t\t 2 群发消息");
                            System.out.println("\t\t 3 私聊消息");
                            System.out.println("\t\t 4 发送文件");
                            System.out.println("\t\t 9 退出系统");
                            System.out.println("请输入你的选择：");
                            key = Utilitys.readString(1);
                            switch (key){
                                case "1":
                                    //System.out.println("显示在线用户列表");
                                    userClientService.onlienFriendList();
                                    break;
                                case "2":
                                    System.out.println("群发消息");
                                    /**
                                     * 1. 群发思路分析：
                                     *      - 客户端A 希望将消息发送给在线的所有其他用户
                                     *         这个其实和私聊一样，只不过在服务器端，需要遍历所有的其他用户线程
                                     *         把其他用户线程的socket都取出来，让后将消息依次发送给不同的用户
                                     */
                                    System.out.println("请输入想对大家说的话：");
                                    String content1 = Utilitys.readString(100);
                                    // 将消息发送给服务器端
                                    messageClientService.sendMessageToAll(content1,userId);
                                    break;
                                case "3":
                                    //System.out.println("私聊消息");
                                    /** 1.私聊的实现逻辑：
                                     *      - 客户端A 要和 客户端B 私聊
                                     *      - 在客户端A中，先把消息发送给服务器，然后由服务器将我们的消息发送给客户端B
                                     *        这里服务器就是做了一个转发的作用
                                     *        所以我们在客户端发送消息的时候，需要指定 接受发，以及写入放
                                    */
                                    System.out.println("请输入想聊天的用户号：");
                                    String getterId = Utilitys.readString(50);
                                    System.out.println("请输入想说的话：");
                                    String content = Utilitys.readString(100);
                                    // 编写一个方法，将消息发送给服务器
                                    messageClientService.sendMessageToOne(content,userId,getterId);
                                    break;
                                case "4":
                                    System.out.println("发送文件");
                                    /**
                                     * 1.文件发送
                                     *      - 客户端A 想要给 客户端B发送一个文件
                                     *        在客户端A 中先把文件读取到字节数组中，把字节数组封装到
                                     *        message对象中，message对象中包含了 发送方，接收方
                                     *        然后客户端A 将message发送给  服务器端
                                     *        服务器端接收到这个message之后，获取其中的 getter
                                     *        然后将message 对象转发给指定的 getter
                                     */
                                    System.out.println("请输入你想把文件发送给的用户：");
                                     getterId = Utilitys.readString(50);
                                    System.out.println("请输入发送文件的路径（形式 d:\\xx.jpg）:");
                                    String src = Utilitys.readString(100);
                                    System.out.println("请输入把文件发送到对方对应的路径：");
                                    String dest = Utilitys.readString(100);
                                    fileClientService.sendFileToOne(src,dest,userId,getterId);
                                    break;
                                case "9":
                                    userClientService.logout();
                                    loop=false;
                                    break;
                            }
                        }
                    }else {
                        System.out.println("登录失败");
                    }
                    break;
                case "9":
                    loop=false;
                    break;
            }
        }
    }
}
